package cn.timeapi.Applet.Mall.CatSquare.service.impl;


import cn.timeapi.Applet.Mall.CatSquare.service.IManagementAccountService;
import cn.timeapi.Applet.Mall.CatSquare.common.Const;
import cn.timeapi.Applet.Mall.CatSquare.common.ServerResponse;
import cn.timeapi.Applet.Mall.CatSquare.dao.ManagementAccountMapper;
import cn.timeapi.Applet.Mall.CatSquare.entity.ManagementAccount;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 描述:IUserService用户服务接口实现
 * @author Vincent Vic
 * create 2020-02-14 17:53
 */

@Service("iManagementAccountService")
public class ManagementAccountServiceImpl implements IManagementAccountService {

    @Autowired
    private ManagementAccountMapper manAccMapper;



    /**
     * 登入功能
     * @param phone 用户名
     * @param password 密码
     * @return 存在/成功/错误
     */
    @Override
    public ServerResponse<ManagementAccount> login(String phone, String password) {
        //判断用户存不存在
        if (manAccMapper.checkPhone(phone) == 0) { //不存在
            return ServerResponse.errorMsg("用户不存在");
        }


        //MD5密码加密
        String md5password= DigestUtils.md5Hex(password.getBytes());
        
        //校验密码
        ManagementAccount managementAccount = manAccMapper.selectLogin(phone, md5password);
        if (managementAccount == null) { //密码错误
            return ServerResponse.errorMsg("密码错误");
        }
        //密码置为空，防止密码泄露
        managementAccount.setPassword(StringUtils.EMPTY);


        return ServerResponse.success("登入成功", managementAccount);
    }



    /**
     * 注册功能
     * @param managementAccount  用户信息
     * @return 存在/成功/失败
     */
    @Override
    public ServerResponse<String> register(ManagementAccount managementAccount) {

        //判断用户存在
        ServerResponse validResponse = this.checkValid(managementAccount.getPhone());
        if (!validResponse.isSuccess()) { //校验提供
            return validResponse;
        }

        //设置普通用户
        managementAccount.setRole(Const.Role.ROLE_CUSTOMER);
        //MD5加密
        managementAccount.setPassword(DigestUtils.md5Hex(managementAccount.getPassword().getBytes()));
        //插入用户
        int resultCount = manAccMapper.insert(managementAccount);
        if (resultCount == 0){
            return ServerResponse.errorMsg("注册失败");
        }


        return ServerResponse.success("注册成功");
    }

    /**
     * 校验用户账号（手机号）
     * @param phone  数据
     * @return 存在/成功/参数错误
     */
    @Override
    public ServerResponse<String> checkValid(String phone){
        int resultCount = 0 ;
        //开始校验
        if (manAccMapper.checkPhone(phone) >0){
            return ServerResponse.errorMsg("用户已存在");
        }
        return ServerResponse.success();
    }

    /**
     * 重置密码
     * @param phone 账号
     * @param passwordOldByMd5 旧密码
     * @param passwordNew 新密码
     * @return 旧不正确/修改成功/修改失败
     */
    @Override
    public ServerResponse<String> restPasword(String phone, String passwordOldByMd5, String passwordNew) {
        //判断用户存不存在
        if (manAccMapper.checkPhone(phone) == 0) { //不存在
            return ServerResponse.errorMsg("用户不存在");
        }

        //校验用户旧密码，确定是这个用户
        ManagementAccount managementAccount = manAccMapper.selectLogin(phone,passwordOldByMd5);
        if (managementAccount == null){
            return ServerResponse.errorMsg("旧密码不正确");
        }

        managementAccount.setPassword(DigestUtils.md5Hex(passwordNew.getBytes()));
        int updataCont = manAccMapper.updateByPrimaryKey(managementAccount);
        if (updataCont == 0 ){
            return ServerResponse.errorMsg("修改失败");
        }
        return ServerResponse.errorMsg("修改成功");
    }

    @Override
    public ServerResponse<ManagementAccount> updataAccount(String oldPhone, String newPhone) {
        //判断用户存不存在
        if (manAccMapper.checkPhone(oldPhone) == 0) { //不存在
            return ServerResponse.errorMsg("用户不存在");
        }

        //修改手机号
        int byPhone = manAccMapper.updateByPhone(oldPhone, newPhone);

        if (byPhone ==0){
            return ServerResponse.errorMsg("修改失败");
        }

        return ServerResponse.success("修改成功");
    }


//    /**
//     * 更新用户资料信息
//     * @param userInfo  用户信息
//     * @return 邮箱存在/修改失败 /成功
//     */
//    @Override
//    public ServerResponse<UserInfo> updataDataInformation(UserInfo userInfo) {
//        UserInfo selectUserInfo = userInfoMapper.selectByUserId(userInfo.getUserId());
//        if (selectUserInfo != null){    //如果用户扩展信息表这个用户信存在更新
//            userInfo.setId(selectUserInfo.getId());
//            userInfoMapper.updateByPrimaryKeySelective(userInfo);
//        } else {  //如果用户扩展信息表这个用户信息是空的，添加
//            userInfoMapper.insert(userInfo);
//        }
//        return ServerResponse.createBySuccessMessage("修改成功");
//    }

//    /**
//     * 获取用户信息
//     * @param userId 用户id
//     * @return 不存在/用户信息
//     */
//    @Override
//    public ServerResponse<UserVo> getInformation(Integer userId) {
//        ManagementAccount managementAccount = manAccMapper.selectByPrimaryKey(userId);
//        if (managementAccount == null){
//            return ServerResponse.errorMsg("用户不存在");
//        }
//        UserInfo userInfo = userInfoMapper.selectByUserId(userId);
//        return ServerResponse.createBySuccess(new UserVo(managementAccount,userInfo));
//    }

    /**
     * 校验是否是管理员
     * @param managementAccount 校验用户
     * @return 状态码
     */
    @Override
    public ServerResponse checkAdminRole(ManagementAccount managementAccount){
        if (managementAccount !=null && managementAccount.getRole() == Const.Role.ROLE_ADMIN){   //管理员登录
            return ServerResponse.success();
        } else {
            return ServerResponse.error();
        }
    }

}